home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DDJMAG / DDJ9203.ZIP / OOPASM.ZIP / BORDER.ASM next >
Assembly Source File  |  1990-07-12  |  3KB  |  132 lines

  1.     .MODEL    SMALL
  2.  
  3.     INCLUDE    equates.inc
  4.     INCLUDE    instance.inc
  5.     INCLUDE    messages.inc
  6.     INCLUDE    objects.inc
  7.  
  8. IF1
  9.     INCLUDE    macros.mac
  10.     INCLUDE    objects.mac
  11.     INCLUDE    strings.mac
  12. ENDIF
  13.  
  14.     EXTRN    winInstVars:NEAR
  15.  
  16.     .CODE
  17.  
  18. COMMENT    %
  19. ==============================================================================
  20. Displays a window border.
  21.  
  22. =============================================================================%
  23. disBorder    PROC    NEAR
  24.     call        winInstVars        ;Get window coordinates
  25.     pushData    <cx,dx>
  26.     push        cx            ;Save upper left row/col
  27.     push        dx            ;Save lower right row/col
  28.     sub        dl,cl            ;Get line length
  29.     xor        dh,dh            ;Clear high order
  30.     mov        cx,dx            ;Pass line length
  31.     pop        dx            ;Restore lower right row/col
  32.     pop        ax            ;Restore upper left row/col
  33.     push        ax            ;Save upper left row/col
  34.     mov        dl,al            ;Lower row, left col
  35.     push        cx            ;Save line length
  36.  
  37.     getInst        bh,HChar,Border        ;Get horizontal char
  38. dsb1:    pushData    <cx,dx>
  39.     disChar        dh,dl,bl,bh        ;Display horizontal line char
  40.     popData        <dx,cx>
  41.     inc        dl            ;Increment column
  42.     loop        dsb1
  43.  
  44.     pop        cx            ;Restore line length
  45.     pop        dx            ;Restore upper left row/col
  46.  
  47. dsb2:    pushData    <cx,dx>
  48.     disChar        dh,dl,bl,bh        ;Display horizontal line char
  49.     popData        <dx,cx>
  50.     inc        dl            ;Increment column
  51.     loop        dsb2
  52.  
  53.     popData        <dx,cx>
  54.  
  55.     pushData    <cx,dx>
  56.     push        cx            ;Save upper left row/col
  57.     push        dx            ;Save lower right row/col
  58.     push        cx            ;Save upper left row/col
  59.     push        dx            ;Save lower right row/col
  60.     pop        cx            ;Restore lower row/col
  61.     pop        dx            ;Restore upper row/col
  62.     sub        ch,dh            ;Get number of rows
  63.     mov        cl,ch            ;Move to low order
  64.     xor        ch,ch            ;Clear high order
  65.     push        cx            ;Save loop count
  66.  
  67.     getInst        bh,VChar        ;Get horizontal char
  68. dsb3:    inc        dh            ;Start at next row
  69.     pushData    <cx,dx>
  70.     disChar        dh,dl,bl,bh        ;Display vertical line char
  71.     popData        <dx,cx>
  72.     loop        dsb3
  73.  
  74.     pop        cx            ;Restore loop count
  75.     pop        ax            ;Restore lower row/col
  76.     pop        dx            ;Restore upper row/col
  77.     mov        dl,al            ;Start at right col
  78.  
  79. dsb4:    inc        dh            ;Start at next row
  80.     pushData    <cx,dx>
  81.     disChar        dh,dl,bl,bh        ;Display vertical line char
  82.     popData        <dx,cx>
  83.     loop        dsb4
  84.  
  85.     popData        <dx,cx>
  86.     push        dx            ;Save lower right row/col
  87.     pushData    <cx,dx>
  88.     getInst        bh,LRChar        ;Get lower right char
  89.     disChar        dh,dl,bl,bh        ;Display lower right char
  90.     popData        <dx,cx>
  91.  
  92.     mov        dl,cl            ;Change colum
  93.     pushData    <cx,dx>
  94.     getInst        bh,LLChar        ;Get lower left char
  95.     disChar        dh,dl,bl,bh        ;Display lower left char
  96.     popData        <dx,cx>
  97.  
  98.     mov        dx,cx            ;Change row/col
  99.     pushData    <cx,dx>
  100.     getInst        bh,ULChar        ;Get upper left char
  101.     disChar        dh,dl,bl,bh        ;Display upper left char
  102.     popData        <dx,cx>
  103.     pop        dx            ;Restore lower right row/col
  104.  
  105.     mov        dh,ch            ;Change row
  106.     getInst        bh,URChar        ;Get upper right char
  107.     disChar        dh,dl,bl,bh        ;Display upper right char
  108.     ret
  109. disBorder    ENDP
  110.  
  111.  
  112.  
  113.     .DATA
  114.  
  115. defMsg    Border,\
  116.     Refresh,\
  117.     <disBorder,,>
  118.  
  119. defObj    Border,\
  120.     <>,\
  121.     <HChar,1,Nil,\
  122.     VChar,1,Nil,\
  123.     ULChar,1,Nil,\
  124.     URChar,1,Nil,\
  125.     LLChar,1,Nil,\
  126.     LRChar,1,Nil>,\
  127.     <Refresh>
  128.  
  129.  
  130.  
  131.     END
  132.